﻿using System;
using System.Collections.Generic;
using System.Text;
using Galaxy.ModuleInterface;

namespace Galaxy.Loader
{
    /// <summary>Аргументы события загрузки объекта</summary>
    public class OnObjectLoadedEventArgs : EventArgs
    {
        /// <summary>Поле с загруженым объектом</summary>
        private object f_Object;
        /// <summary>ЗАгруженый объект</summary>
        public object Object { get { return f_Object; } }
        /// <summary>Инициализация нового аргумента события загрузки объекта</summary>
        /// <param name="Object">Загруженый объект</param>
        public OnObjectLoadedEventArgs(object Object) { f_Object = Object; }
    }

    /// <summary>Аргументы события загрузки модуля</summary>
    public class OnModuleLoadedEventArgs : OnObjectLoadedEventArgs
    {
        /// <summary>Загруженый модуль</summary>
        public IGalaxyModule Module { get { return Object as IGalaxyModule; } }
        /// <summary>Инициализация нового аргумента события загрузки модуля</summary>
        /// <param name="Module">ЗАгрууженый модуль</param>
        public OnModuleLoadedEventArgs(IGalaxyModule Module) : base(Module) { }
    }

    /// <summary>Обработчик события загрузки объекта</summary>
    /// <param name="Loader">Модуль загрузчика</param>
    /// <param name="Args">Аргументы события загрузки объекта</param>
    public delegate void OnObjectLoadedEventHandler(CLoader Loader, OnObjectLoadedEventArgs Args);
    /// <summary>Обработчик события загрузки модуля</summary>
    /// <param name="Loader">Модуль загрузчика</param>
    /// <param name="Args">Аргумент события загрузки модуля</param>
    public delegate void OnModuleLoadedEventHandler(CLoader Loader, OnModuleLoadedEventArgs Args);
}
